package marseillaisdu90.student_life;

import marseillaisdu90.modele.Objet;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.*;
import android.widget.*;

public class Menu_Inventaire extends Activity {

	private MonApplication appli;
	private Button boutonSon;
	private Button boutonJeter;
	private TextView descInventaire;
	private View ancienneObjetSelectionne;
	private ObjetAdapter listeObjetsAdapter;
	private int objetSelectionne;
	private boolean estCharge = false;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		Log.i("creation menu", "creation menu");
		
		appli = (MonApplication)getApplication();
		setContentView(R.layout.menu);
		ancienneObjetSelectionne = null;
		boutonSon = (Button)findViewById(R.id.activer_son);
		boutonJeter = (Button)findViewById(R.id.bouton_poser);
		descInventaire = (TextView)findViewById(R.id.desc_inventaire);
		GridView listeObjet = (GridView) findViewById(R.id.liste_objets_inventaire);
		objetSelectionne = -1;
		
		boutonJeter.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				
				if(suppressionPossible() && objetSelectionne >=0 && objetSelectionne < appli.modele.inv.nbObjet()) {

					appli.modele.inv.getObjet(objetSelectionne).modifPosX(appli.modele.joueur.getPosX());
					appli.modele.inv.getObjet(objetSelectionne).modifPosY(appli.modele.joueur.getPosY());
					appli.modele.ListePiece.id.get(appli.modele.nopiece_courante).ajouterObjet(appli.modele.inv.getObjet(objetSelectionne));
					
					appli.modele.inv.supprimerObjet(objetSelectionne);
					
					//appli.getSl().
					listeObjetsAdapter.notifyDataSetChanged();
					ancienneObjetSelectionne = null;
					descInventaire.setGravity(android.view.Gravity.CENTER_HORIZONTAL);
					descInventaire.setText("Cliquez 1 fois\n sur l'objet\n pour obtenir\n des infos");
		  		}
		  		else
		  			mettreAJourSupprImpossible();
				
			}
		});
		
		
		descInventaire.setGravity(android.view.Gravity.CENTER_HORIZONTAL);
		descInventaire.setText("Cliquez 1 fois\n sur l'objet\n pour obtenir\n des infos");
		
		listeObjet.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> arg0, View vue, int position, long id) {
				if(ancienneObjetSelectionne != null && ancienneObjetSelectionne != vue)
					ancienneObjetSelectionne.setBackgroundColor(Color.TRANSPARENT);
				if(ancienneObjetSelectionne != vue)
					vue.setBackgroundColor(Color.BLUE);
				ancienneObjetSelectionne = vue;
				
				objetSelectionne = position;
				mettreAJourDescription();
			}
			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				if(ancienneObjetSelectionne != null)
					ancienneObjetSelectionne.setBackgroundColor(Color.TRANSPARENT);
				ancienneObjetSelectionne = null;
				objetSelectionne = -1;
				mettreAJourDescription();
				
			}
		});
		
		listeObjet.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View vue, int position, long id) {
				if(ancienneObjetSelectionne != null && ancienneObjetSelectionne != vue)
					ancienneObjetSelectionne.setBackgroundColor(Color.TRANSPARENT);
				if(ancienneObjetSelectionne != vue)
					vue.setBackgroundColor(Color.BLUE);
				ancienneObjetSelectionne = vue;
				
				objetSelectionne = position;
				mettreAJourDescription();
			}
		});
		
		listeObjetsAdapter = new ObjetAdapter(this);
		listeObjet.setAdapter(listeObjetsAdapter);
		
		if(appli.modele.sonActive)
			boutonSon.setBackgroundResource(android.R.drawable.ic_lock_silent_mode);
		else
			boutonSon.setBackgroundResource(android.R.drawable.ic_lock_silent_mode_off);
		
		boutonSon.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				appli.modele.sonActive = !appli.modele.sonActive;
				
				if(appli.modele.sonActive) {
					boutonSon.setBackgroundResource(android.R.drawable.ic_lock_silent_mode);
					appli.pauseMusique();
				}
				else {
					boutonSon.setBackgroundResource(android.R.drawable.ic_lock_silent_mode_off);
					appli.demarrerMusique();
				}
			}
		});
		
		estCharge = true;
		
	}
	
	
	
	/*
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		
		if (keyCode == KeyEvent.KEYCODE_MENU || keyCode == KeyEvent.KEYCODE_BACK && estCharge) {
			Log.i("menu key", "menu key");
			this.finish();
		}
		return true;
	}*/
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		
		Log.i("menu key", "menu key");
		this.finish();
		
		return true;
	}



	public void mettreAJourDescription() {

		Objet obj = null;
		if(objetSelectionne >= 0 && objetSelectionne < appli.modele.inv.nbObjet())
			obj = appli.modele.inv.getObjet(objetSelectionne);
		
		if (obj == null) {
			descInventaire.setGravity(android.view.Gravity.CENTER_HORIZONTAL);
			descInventaire.setText("Cliquez 1 fois\n sur l'objet\n pour obtenir\n des infos");
		} else {
			descInventaire.setGravity(android.view.Gravity.NO_GRAVITY);
			descInventaire.setText("Nom : " + obj.getNomObj() + "\nType : "
					+ obj.getTypeObj() + "\nDescription : "
					+ obj.getDescriptionObj() + "\nPoids : "
					+ obj.getPoidsObj());
		}
	}

	public boolean suppressionPossible() {

		boolean possible = true;

		for (Objet o : appli.modele.ListePiece.id.get(appli.modele.nopiece_courante).ListeObj) {
			if ((o.getPosXObj() == appli.modele.joueur.getPosX()) && (o.getPosYObj() == appli.modele.joueur.getPosY()))
				possible = false;
		}
		
		return possible;

	}
	
	/**
	 * Méthode qui affiche un message lorsque un objet se trouve déjà à
	 * l'emplacement du joueur
	 */
	public void mettreAJourSupprImpossible() {

		descInventaire.setGravity(android.view.Gravity.CENTER_HORIZONTAL);
		descInventaire.setText("Un objet se\ntrouve déjà ici\n\nVeuillez vous déplacez\npour supprimer\ncet objet");
		if(ancienneObjetSelectionne != null)
			ancienneObjetSelectionne.setBackgroundColor(Color.TRANSPARENT);
		ancienneObjetSelectionne = null;
		objetSelectionne = -1;
		
	}
	
}
